/*
js文件的script标签一般放body后面 这么网页可以更快地显示出来
如果放在head里面，由于需要加装完成js文件才能开始渲染html元素，加载这段时间页面会是空白状态
*/

function onloadBody(){
    //alert("Hello Js")
}

//chp4

//js没有块作用域,for循环 if语言里面的变量都是可以在父级作用域访问的es6的let关键字 可以定义块作用域

function callMe(params) {
    var sum = 10 + 30 //有var关键字定义的是局部变量 如果去掉 var 关键字 则定义的是全局变量
    return sum
}

//document.write(callMe())

function compareFn(a,b) {
    //console.log("-----compareFn------",a,b);
    return -1;
}

var arr = [7,3,5,2,4,1,8,9,3,0,1];
arr.sort();

console.log("-------啦啦啦+++++",arr);


for (let i = 0; i < arr.length-1; i++) {
    for (let j = 0; j < arr.length-i-1; j++) {
        if(arr[j+1] > arr[j])
        {
            arr[j+1] = arr[j+1] + arr[j]
            arr[j] = arr[j+1] - arr[j]
            arr[j+1] = arr[j+1] - arr[j]
        }        
    }
    //document.writeln('i='+i+' : '+arr+'<br>');
    
}


/*
标记清除法:
JavaScript 中最常用的垃圾收集方式是标记清除（mark-and-sweep）。当变量进入环境（例如，在函
数中声明一个变量）时，就将这个变量标记为“进入环境”。从逻辑上讲，永远不能释放进入环境的变
量所占用的内存，因为只要执行流进入相应的环境，就可能会用到它们。而当变量离开环境时，则将其
标记为“离开环境”。

*/

function fn(val,idx,arr) {
   val *= 2 
   return val
}
arr = [1,2,3,4,5]
arr = arr.map(fn)
document.writeln(arr+'<br>');